Kolekcije podataka¶
U prethodnoj lekciji smo upotrebili torku vrednosti da bismo pomoću for petlje obavili neke naredbe (računanje i ispisivanje) nad svakom vrednošću iz torke.
Torke su takođe tip podataka u Pajtonu, kao što su to brojevi, stringovi ili logičke vrednosti. Tipovi int (ceo broj), float (realan broj), str (string) i bool (logička vrednost) su osnovni tipovi. Razlika između torki i osnovnih tipova je u tome što se vrednost torke sastoji od više vrednosti jednostavnijeg tipa.
Svaku vrednost koja se sastoji od više vrednosti jednostavnijeg tipa zvaćemo kolekcija. Podatke od kojih se kolekcija sastoji zovemo elementi kolekcije.
Jedine kolekcije koje smo do sada upozali su torke, koje ćemo sada upoznati detaljnije. U nastavku lekcije ćemo videti još neke vrste kolekcija.
Torka i njeni elementi¶
Pakovanje i raspakivanje torki¶
Celu torku možemo da smestimo u promenljivu, kao što to radimo i sa vrednostima prostijeg tipa. U sledećem primeru, promenljiva temperature sadrži celu torku kao svoju vrednost.
Ovakvo dodeljivanje vrednosti (kao u prvoj liniji programa) zovemo i pakovanje torke. Moguća je i obrnuta dodela: kada znamo koliko torka ima elemenata, možemo da elemente torke dodelimo odgovarajućem broju promenljivih:
Kažemo da se u naredbi ime, prezime, nadimak = puno_ime
vrši raspakivanje torke.
Isti efekat ima i srodna naredba
ime, prezime, nadimak = "Milan", "Jovanović", "Batut"
U ovoj naredbi se torke i ne pojavljauju, pa ovde govorimo o višestrukom dodeljivnju vrednosti.
Elementi i indeksi torke¶
Elemente torke možemo da dobijemo i tako što napišemo ime torke, a iza njega u uglastim zagradama redni broj elementa koji želimo. Ovde treba zapamtiti da brojanje elemenata bilo koje kolekcije počinje od nule. Na primer:
Redni broj elementa se još naziva i indeks elementa. Za torku od n elemenata kao indekse možemo da koristimo brojeve 0, 1, 2, … n-1. U primeru gore je n = 3, pa su dozvoljeni indeksi 0, 1 i 2. Pokušaj da upotrebimo neki indeks van ovih granica prouzrokuje grešku (možete da isprobate ovo).
Dužina torke¶
Broj elemenata torke možemo da dobijemo pomoću funkcije len.
ili kraće:
Obratite pažnju na dvostruke zagrade (jedne zbog funkcije, a druge zbog torke).
Kroz ove primere smo videli da elementi torke mogu da budu brojevi ili stringovi. U stvari, elementi torke mogu biti bilo kojeg tipa, osnovnog ili složenijeg.
Dozvoljeno je na primer praviti torku torki:
Torka t sadrži dve jednostavnije torke, zato je broj njenih elemenata 2.
U Pajtonu je dozvoljeno da elementi torke budu različitog tipa i kasnije ćemo videti i takve primere.
Opseg¶
Opseg (engl. range) je još jedna vrsta kolekcije. Za razliku od torke, elementi ove kolekcije su uvek celi brojevi.
Opseg može da se zada na više načina.
Opseg sa jednim argumentom¶
Najjednostavniji oblik zadavanja opsega je range(n), gde je n neki ceo pozitivan broj. Opseg range(n) sadrži celobrojne vrednosti od 0 do n, ne uključujući n. Na primer, range(5) sadrži vrednosti 0, 1, 2, 3, 4.
Vidimo da u for naredbi možemo da koristimo opseg na isti način kao i torku. U stvari, na mestu torke ili opsega može da stoji bilo koja kolekcija.
Pošto opseg range(n) sadrži ukupno n vrednosti, ovako zadat opseg se često koristi kada neku naredbu treba samo ponoviti n puta na isti način:
Naredba print je izvršena za svaku vrednost i iz sekvence 0, 1, 2, 3, 4, ali u ovom primeru se te vrednosti ne koriste u telu petlje. Tako smo postigli da se naredba print izvrši 5 puta na potpuno isti način, to jest da se ponovi 5 puta.
Druga česta upotreba ovakvog opsega je da pomoću njega prođemo kroz sve elemente torke. Ovakav način prolaženja kroz vrednosti torke je pogodan kada nam osim tih vrednosti u petlji trebaju i njihovi redni brojevi (ovakav način prolaženja kroz kolekciju je češći u drugim programskim jezicima nego u Pajtonu).
Opseg sa dva argumenta¶
Kada nam je potrebna sekvenca uzastopnih celih brojeva koja ne počinje nulom, opseg zadajemo kao range(a, b), gde su a i b celi brojevi, takvi da je \(a<b\). Tada sekvencu čine celi brojevi od a do b, ne uključujući b. Na primer, opseg range(1, 6) daje sekvencu brojeva 1, 2, 3, 4, 5:
Opseg sa tri argumenta¶
Treći oblik zadavanja opsega ima tri argumenta:
Vrednosti opsega zadatog sa range(a, b, c) idu od a do b (ne uključujući b) sa korakom c, tj. menjajući se za po c. Korak c može da bude i negativan:
Opseg možemo da konvertujemo u torku (obrnuto nije moguće, niti je potrebno):
String kao kolekcija¶
Stringove smo do sada koristili kao osnovni tip, ali stringovi mogu da se koriste i kao kolekcije pojedinačnih karaktera. Možemo da prolazimo kroz karaktere stringa pomoću petlje i da dohvatamo pojedine karatere koristeći indekse:
Funkcije nad kolekcijama¶
U Pajtonu postoje mnoge funkcije koje kao argument prihvataju kolekciju. Jedna od njih je funkcija len, koju smo već upoznali. Još neke često korišćene funkcije koje se primenjuju nad kolekcijama su:
min, koja daje najmanji element kolekcije
max, koja daje najveći element kolekcije
sum, koja daje zbir elemenata kolekcije
Vrednosti funkcija len, min, max, sum za opseg možemo da odredimo i iz parametara opsega. Takođe, funkcije min i max se obično ne primenjuju na stringove (one vraćaju redom karakter sa najmanjim i najvećim kodom). Ovde samo ističemo da sve pomenute funkcije prihvataju razne vrste kolekcija kao svoj argument (uključujući i opseg i string).
Pitanja¶
- dolazi do greške u programu
- Pokušajte ponovo
- 2
- Pokušajte ponovo
- 20
- Tačno
- 3
- Pokušajte ponovo
Q-28: Šta ispisuje sledeći program?
t = (32, 41, 20, 17)
a, b, c, d = t
print(c)
- 1
- Pokušajte ponovo
- 2
- Tačno
- dolazi do greške u programu
- Pokušajte ponovo
- 3
- Pokušajte ponovo
Q-29: Šta ispisuje sledeći program?
a = (1, 2, 3)
print(a[1])
- range(4)
- Pokušajte ponovo
- range(1, 4)
- Tačno
- range(3)
- Pokušajte ponovo
- range(1, 3)
- Pokušajte ponovo
Q-30: Koji opseg sadrži samo vrednosti 1, 2, 3 ?
- 5
- Tačno
- 6
- Pokušajte ponovo
- 9
- Pokušajte ponovo
- 10
- Pokušajte ponovo
Q-31: Koliko vrednosti sadrži opseg range(1, 10, 2) ?
-
Q-32: Uparite opsege sa brojem elemenata.
Pokušajte ponovo!
- 5
- range(5)
- 0
- range(3, 3)
- 3
- range(1, 4)
- 1
- range(3, 6, 3)
-
Q-33: Uparite opsege sa vrednostima.
Pokušajte ponovo!
- 3, 4, 5
- range(3, 6)
- 0, 1, 2
- range(3)
- 3, 1
- range(3, -1, -2)
- 3, 2, 1, 0, -1
- range(3, -2, -1)
- 3
- range(3, 6, 3)